/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package example04;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Admin
 */
public class FileVocabulary implements Vocabulary {
    
    static final String FILE_NOT_FOUND = "Файл не найден. ";
    static final String ERROR_IO = "Произошла ошибка I/O. ";
    static final String CLOSE_ERROR = "Ошибка закрытия файла. ";
    static final String SPLIT_ERROR = "В словаре обнаружен неверный формат слова. ";
    static final String WORD_NOT_FOUND = "Слово в словаре не найдено. ";
    static final String CLOSE_WORD = "close";
    private Map<String, String> map = new HashMap<>();
    private BufferedReader input;
    private String str;

    /**
     * открывает файл и записывает его содержимое в HashMap
     * @param file_name
     * @return
     * @throws IOException
     */
    @Override
    public void open(String file_name) throws IOException {
        try {
            File file = new File(file_name);
            FileReader fileReader = new FileReader(file);
            input = new BufferedReader(fileReader);
            String line;
            while ((line = input.readLine()) != null) {
                try{
                    String parts[] = line.split("\\ - ");
                    map.put(parts[0], parts[1]);
                } catch(ArrayIndexOutOfBoundsException e){
                    System.out.println(SPLIT_ERROR);
                }
            }
        } catch(FileNotFoundException e){
            System.out.println(FILE_NOT_FOUND);
        } catch(IOException e){
            System.out.println(ERROR_IO);
        }
        finally{
            try{
                input.close();
            } catch(IOException e){
                System.out.println(CLOSE_ERROR);                
            }            
        }
    }
    
    /**
     * переводит слово, если оно есть в словаре
     * @param word
     */
    @Override
    public String translate(String word) {
        if(map.containsKey(word)){
            str = map.get(word);
        }
        else{
            if(word.equals(CLOSE_WORD) != true){
                str = WORD_NOT_FOUND;
            }
        }
        return str;
    }
    
} 
